/* 
 * File:   MeangleFactory.h
 * Author: maximiliano
 *
 * Created on March 26, 2013, 5:42 PM
 */

#ifndef MEANGLEFACTORY_H
#define	MEANGLEFACTORY_H

#include <cstring>
#include "Mangle.h"
#include "Descriptor.h"

using namespace std;

namespace TP3 { namespace Mangling {
    
#define UNKNOWN_MANGLE 101    

class MangleFactory {
public:
    
    MangleFactory();
    
    virtual ~MangleFactory();
        
    Mangle* create (Descriptor& descriptor) throw (int);
    
private:

    Mangle* createUppercase (Descriptor& descriptor);

    Mangle* createLowercase (Descriptor& descriptor);

    Mangle* createRepeat (Descriptor& descriptor);

    Mangle* createRotate (Descriptor& descriptor);

    Mangle* createInsert (Descriptor& descriptor);

    Mangle* createRevert (Descriptor& descriptor);

    Mangle* createPrint (Descriptor& descriptor);    
    
};

}}

#endif	/* MEANGLEFACTORY_H */

